// /**
//  * axios请求封装
//  * 统一处理请求拦截、响应拦截、错误处理
//  */

import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
import { useAuthStore } from '@/stores/auth'
import { createPinia } from 'pinia'  // 添加这行

const service = axios.create({
  baseURL: '/api',
  timeout: 10000
})

let isRedirecting = false

// 修改处理未授权的函数
const handleUnauthorized = async (isTokenExpired = false) => {
  if (isRedirecting) return
  isRedirecting = true

  try {
    // 清除登录信息
    sessionStorage.clear()  // 直接清除 sessionStorage
    
    // 保存当前路由
    const currentPath = router.currentRoute.value.fullPath
    
    // 只在 token 过期时显示提示
    if (isTokenExpired) {
      ElMessage.error('登录已过期')
    }
    
    // 跳转到登录页
    await router.push({
      path: '/login',
      query: { redirect: currentPath }
    })
  } catch (error) {
    console.error('处理未授权错误:', error)
  } finally {
    // 重置标记
    setTimeout(() => {
      isRedirecting = false
    }, 1000)
  }
}

// 请求拦截器
service.interceptors.request.use(
  config => {
    const token = sessionStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    
    if (res.code === 200) {
      return res
    }
    
    // 处理业务错误
    if (res.code === 401) {
      handleUnauthorized(true)
    } else {
      ElMessage.error(res.message || '操作失败')
    }
    return Promise.reject(new Error(res.message || '操作失败'))
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          handleUnauthorized(true)
          break
        case 403:
          ElMessage.error('无权访问该页面')
          break
        case 500:
          ElMessage.error('服务器错误')
          break
        default:
          ElMessage.error(error.response.data?.message || '请求失败')
      }
    } else {
      ElMessage.error('网络连接失败')
    }
    return Promise.reject(error)
  }
)

export default service




// import axios from 'axios'
// import { ElMessage } from 'element-plus'
// import { useAuthStore } from '@/stores/auth'


// // 创建 axios 实例
// const request = axios.create({
//   baseURL: '/api', // 基础路径
//   timeout: 10000, // 请求超时时间
//   headers: {
//     'Content-Type': 'application/json' // 默认请求头
//   }
// })

// // 请求拦截器
// request.interceptors.request.use(
//   (config) => {
//     const authStore = useAuthStore() // 使用 Pinia 的 Auth Store 获取 token
//     // 添加 token 到请求头
//     if (authStore.token) {
//       config.headers.Authorization = `Bearer ${authStore.token}` // 在请求头中添加 token
//     }
//     // 添加用户角色到请求头
//     // if (authStore.role) {
//     //   config.headers['X-User-Role'] = authStore.role
//     // }

//     // 添加到请求参数中
//     if (!config.url.includes('/login')) {  // 添加这个判断
//       // 添加到请求参数中
//       if (config.method === 'get') {
//         // GET 请求添加到 URL 参数
//         config.params = {
//           ...config.params,
//           role: authStore.role
//         }
//     } else {
//       // POST/PUT/DELETE 等请求添加到请求体
//       if (!config.data) {
//         config.data = {}
//       }
      
//       if (typeof config.data === 'object') {
//         config.data.role = authStore.role
//       }
//     }
//   }
//     return config
//   },
//   (error) => {
//     return Promise.reject(error)
//   }
// )

// // 响应拦截器
// request.interceptors.response.use(
//   (response) => {
//     const res = response.data
//     // return res

//     // 根据后端 Result 类的返回格式判断
//     if (res.code === 200) {
//       return res
//     } else {
//       // 处理业务错误
//       ElMessage.error(res.message || '操作失败')
//       // 如果是未登录或token失效
//       if (res.code === 401 || res.message?.includes('未登录')) {
//         handleUnauthorized()
//       }
//       return Promise.reject(ElMessage.error(res.message || '操作失败'))
//     }
//   },
//   (error) => {
//     // 处理 HTTP 网络错误
//     const authStore = useAuthStore()
//     // let message = ''
//     if (error.response) {
//       switch (error.response.status) {
//         case 401:
//           ElMessage.message = '登录已过期，请重新登录'
//           authStore.logout()
//           router.push('/login')
//           break
//         case 403:
//           ElMessage.message = '没有权限'
//           break
//         case 404:
//           ElMessage.message = '请求地址错误'
//           break
//         case 500:
//           ElMessage.message = '服务器故障'
//           break
//         default:
//           ElMessage.message = '网络连接故障'
//       }
//     } else {
//       ElMessage.message = '网络连接失败'
//     }

// // 处理未授权的情况
// const handleUnauthorized = () => {
//   const authStore = useAuthStore()
//   authStore.logout()
//   ElMessage.error('登录已过期，请重新登录')

//    // 保存当前路由，登录后跳回
//    const currentPath = router.currentRoute.value.fullPath
//    if (currentPath !== '/login') {
//      router.push({
//        path: '/login',
//        query: { redirect: currentPath }
//      })
//    }
//     // ElMessage.error(ElMessage.message) // 使用 Element Plus 的消息提示
//     // return Promise.reject(error)
// }
//   }
// )

// export default request
